/**
 * 用户信息管理工具
 * 提供用户信息的获取、保存、清除等功能
 */

/**
 * 获取完整的用户信息
 * @returns {Object|null} 用户信息对象
 */
export function getUserInfo() {
  try {
    const userInfo = uni.getStorageSync('userInfo')
    return userInfo || null
  } catch (error) {
    console.error('获取用户信息失败:', error)
    return null
  }
}

/**
 * 获取用户ID
 * @returns {String|null} 用户ID
 */
export function getUserId() {
  try {
    return uni.getStorageSync('userId') || null
  } catch (error) {
    console.error('获取用户ID失败:', error)
    return null
  }
}

/**
 * 获取用户名
 * @returns {String|null} 用户名
 */
export function getUserName() {
  try {
    return uni.getStorageSync('userName') || null
  } catch (error) {
    console.error('获取用户名失败:', error)
    return null
  }
}

/**
 * 获取用户类型
 * @returns {Number|null} 用户类型
 */
export function getUserType() {
  try {
    return uni.getStorageSync('userType') || null
  } catch (error) {
    console.error('获取用户类型失败:', error)
    return null
  }
}

/**
 * 获取学校ID
 * @returns {Number|null} 学校ID
 */
export function getSchoolId() {
  try {
    return uni.getStorageSync('schoolId') || null
  } catch (error) {
    console.error('获取学校ID失败:', error)
    return null
  }
}

/**
 * 获取用户头像
 * @returns {String|null} 用户头像URL
 */
export function getUserAvatar() {
  try {
    return uni.getStorageSync('userAvatar') || null
  } catch (error) {
    console.error('获取用户头像失败:', error)
    return null
  }
}

/**
 * 获取Token
 * @returns {String|null} Token
 */
export function getToken() {
  try {
    return uni.getStorageSync('tokenId') || uni.getStorageSync('token') || null
  } catch (error) {
    console.error('获取Token失败:', error)
    return null
  }
}

/**
 * 检查用户是否已登录
 * @returns {Boolean} 是否已登录
 */
export function isLoggedIn() {
  const userId = getUserId()
  const token = getToken()
  return !!(userId && token)
}

/**
 * 获取用户性别文本
 * @returns {String} 性别文本
 */
export function getUserSexText() {
  const userSex = uni.getStorageSync('userSex')
  switch (userSex) {
    case 1:
      return '男'
    case 0:
      return '女'
    default:
      return '未知'
  }
}

/**
 * 获取用户类型文本
 * @returns {String} 用户类型文本
 */
export function getUserTypeText() {
  const userType = getUserType()
  switch (userType) {
    case 1:
      return '管理员'
    case 2:
      return '教师'
    case 3:
      return '学生'
    default:
      return '未知'
  }
}

/**
 * 保存用户登录信息
 * @param {Object} userInfo 用户信息对象
 */
export function saveUserInfo(userInfo) {
  try {
    // 保存完整的用户信息
    uni.setStorageSync('userInfo', userInfo)

    // 保存用户基本信息
    if (userInfo.userId) uni.setStorageSync('userId', userInfo.userId)
    if (userInfo.userName) uni.setStorageSync('userName', userInfo.userName)
    if (userInfo.userSex !== undefined) uni.setStorageSync('userSex', userInfo.userSex)
    if (userInfo.userType) uni.setStorageSync('userType', userInfo.userType)
    if (userInfo.schoolId) uni.setStorageSync('schoolId', userInfo.schoolId)
    if (userInfo.tokenId) uni.setStorageSync('tokenId', userInfo.tokenId)
    if (userInfo.user_avatar) uni.setStorageSync('userAvatar', userInfo.user_avatar)
    if (userInfo.dictName) uni.setStorageSync('dictName', userInfo.dictName)
    if (userInfo.grade_name) uni.setStorageSync('gradeName', userInfo.grade_name)
    if (userInfo.gradeName) uni.setStorageSync('gradeName', userInfo.gradeName)
    if (userInfo.class_name) uni.setStorageSync('className', userInfo.class_name)
    if (userInfo.className) uni.setStorageSync('className', userInfo.className)
    if (userInfo.phone) uni.setStorageSync('phone', userInfo.phone)
    if (userInfo.mobile) uni.setStorageSync('phone', userInfo.mobile)

    console.log('用户信息保存成功')
  } catch (error) {
    console.error('保存用户信息失败:', error)
  }
}

/**
 * 清除用户登录信息（退出登录）
 */
export function clearUserInfo() {
  try {
    const keysToRemove = [
      'userInfo',
      'userId',
      'userName',
      'userSex',
      'userType',
      'schoolId',
      'tokenId',
      'token',
      'userAvatar',
      'dictName',
      'sessionId' // 同时清除sessionId
    ]

    keysToRemove.forEach((key) => {
      uni.removeStorageSync(key)
    })

    console.log('用户信息清除成功')
  } catch (error) {
    console.error('清除用户信息失败:', error)
  }
}

/**
 * 获取用户显示名称（优先使用真实姓名，其次用户名）
 * @returns {String} 显示名称
 */
export function getDisplayName() {
  const dictName = uni.getStorageSync('dictName')
  const userName = getUserName()
  return dictName || userName || '未知用户'
}

// 默认导出
export default {
  getUserInfo,
  getUserId,
  getUserName,
  getUserType,
  getSchoolId,
  getUserAvatar,
  getToken,
  isLoggedIn,
  getUserSexText,
  getUserTypeText,
  saveUserInfo,
  clearUserInfo,
  getDisplayName
}

